home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_10_03 / 1003110a < prev    next >
Text File  |  1992-01-11  |  4KB  |  119 lines

  1.  
  2.  /************************************************************
  3.   *  Program:    DMENU Menu Object File Analyzer
  4.   *  Module:     dmenu.c
  5.   *  dmenu.c:    Reads a menu object file, for debuging menu
  6.   *              compiler
  7.   *
  8.   *  Written by: Leor Zolman, 7/91
  9.   *
  10.   *  Menu object file format:
  11.   *  ---------------------------------------------------------
  12.   *      <count>         (integer count of # of menus in file)
  13.   *      MENU 1          (MENU structure for 1st Menu)
  14.   *          ITEM 1
  15.   *          ITEM 2
  16.   *          ...
  17.   *          ITEM n_items
  18.   *      MENU 2          (MENU structure for 2nd Menu)
  19.   *          ...
  20.   *      .
  21.   *      .
  22.   *      .
  23.   *      MENU <count>    (MENU structure for final Menu)
  24.   *          ...
  25.   *
  26.   *  ---------------------------------------------------------
  27.   *  Compile:
  28.   *      Xenix:  cc dmenu.c -o dmenu
  29.   *      DOS:    bcc dmenu.c     (Borland C++)
  30.   ************************************************************/
  31.  
  32.  #include <stdio.h>
  33.  #include "cmenu.h"
  34.  
  35.  #define OK  0
  36.  
  37.  MENU Menu;
  38.  ITEM Item, *ip = &Item;
  39.  
  40.  char obj_name[MAX_CMD];
  41.  int n_menus;
  42.  
  43.  int main(argc,argv)
  44.  int argc;
  45.  char **argv;
  46.  {
  47.      register i, j;
  48.      int count;
  49.      FILE *fp;
  50.      
  51.      if (argc != 2)
  52.          exit(puts("usage: dmenu <menu-object>\n"));
  53.  
  54.      strcpy(obj_name, argv[1]);
  55.      strcat(obj_name, ".mnc");
  56.      
  57.      if ((fp = fopen(obj_name, "rb")) == NULL)
  58.      {
  59.          fprintf(stderr, 
  60.              "Cannot open %s for reading.\n", obj_name);
  61.          return ERROR;
  62.      }
  63.      
  64.      if (fread((Void *)&n_menus, sizeof n_menus, 1, fp) != 1)
  65.      {
  66.          fprintf(stderr,
  67.              "Error reading menu count from %s\n", obj_name);
  68.          return ERROR;
  69.      }
  70.      printf("Menu count = %d\n", n_menus);
  71.      
  72.      for (i = 0; i < n_menus; i++)
  73.      {
  74.          if (fread((Void *) &Menu, sizeof (MENU), 1, fp) != 1)
  75.          {
  76.              fprintf(stderr, 
  77.                  "Error reading from %s\n", obj_name);
  78.              return ERROR;
  79.          }
  80.  
  81.          printf("******** Start of Menu #%d: *********\n", i+1);
  82.          printf("\tTitle: %s\n", Menu.title);
  83.          printf("\tPath:  %s\n", Menu.path);
  84.          printf("\tContains %d items.\n", Menu.nitems);
  85.          printf("\talign =  %c\n", Menu.align);
  86.          printf("\tColumns = %d, ", Menu.columns);
  87.          printf("Spacing = %d, Widest = %d\n",
  88.                  Menu.spacing, Menu.widest);
  89.          printf("\tShell escapes are %sallowed",
  90.                  Menu.escape == YES ? "" : "NOT ");
  91.          printf("\n");
  92.          
  93.          for (j = 0; j < Menu.nitems; j++)
  94.          {
  95.              if (fread((Void *) ip, sizeof (ITEM), 1, fp) != 1)
  96.              {
  97.                  fprintf(stderr, 
  98.                      "Error reading from %s\n", obj_name);
  99.                  return ERROR;
  100.              }
  101.              printf("Item #%d:\n", j+1);
  102.              printf("\tTEXT =   %s\n", ip->text);
  103.              printf("\tPATH =   %s\n", ip->path);
  104.              printf("\tACTION = %s\n", ip->action);
  105.              printf("\tHELP =   %s\n", ip->help);
  106.              printf("pre-clear =  %c\n", ip->pre_clear);
  107.              printf("post-clear = %c\n", ip->post_clear);
  108.              printf("prompt =     %c\n", ip->prompt);
  109.              printf("acttyp =     %d\n", ip->acttyp);
  110.              printf("lmenunum =   %d\n", ip->lmenunum);
  111.              printf("nextcode =   %d\n", ip->nextcode);
  112.              printf("nextitem =   %d\n", ip->nextitem);
  113.              printf("\n");
  114.          }
  115.          printf("**** END OF MENU #%d ****\n", i+1);
  116.      }
  117.      return OK;
  118.  }
  119.